Modernly, the use of virtualization is increasingly common on personal computers. Virtualization is an important part of solutions relating to energy management, data security, hardening of applications against malware (software created for purpose of malfeasance), and more.
One virtualization approach is to provide a small hypervisor which is tightly integrated to a few small and hardened application programs, for example, email client programs and movie disc players. The hypervisor may also host, but is only loosely connected to, a closed operating system which is typically a complex and full-featured general purpose computer environment or operating system such as Microsoft® Windows® Vista® or a similar commercial software product. A closed operating system is an operating system for which the source code is unavailable to most users and for that reason can be difficult to modify reliably. This can be contrasted with application programs, for example, a word processing or accounting program and operating systems based on the Open Source approach, for example, Linux® or other suitable operating systems.
By design, conventional hypervisors may support multiple closed operating systems per operating session and virtualize all supported peripheral devices. This may prevent efficient non-virtualized access to some resources (typically by the closed operating system) while properly virtualizing and especially sharing those or other resources.
I/O (input-output) device emulation is commonly used in hypervisor based systems such as the Open Source Xen® hypervisor software. Use of emulation, including I/O emulation, can result in a substantial performance hit. On the other hand it is desirable to emulate or virtualize some peripheral devices or resources from time to time in response to changes in operating conditions. For example, an Internet browser being used for an interactive user session may be a high-priority foreground task or activity; whereas the same Internet browser program might be considered a low-priority background activity while downloading a multi-megabyte sized file especially if the download is time-shared with user focused interactivity. In such an exemplary case the device that connects to the Internet might be virtualized only when the browser operates with low-priority.
Given the current state of technology, there is a need for interrupt handling techniques that serve two operating systems (e.g. one closed and one open) that may simultaneously be present on a given platform. Whenever a closed operating system does not have provision for interrupt sharing for all classes of devices, this can be a significant challenge. In particular, MSIs (message-signaled interrupts) commonly are used with interrupt handlers that are not designed for interrupt sharing for the reason that one of the design aims of MSI was to get rid of any need to share interrupts.
One solution to the aforementioned shortcoming is to modify the closed operating system. However, there may be strong commercial reasons, especially quality assurance related reasons, not to do that.